package com.xinggq.user.service.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xinggq.common.page.PageCondition;
import com.xinggq.user.service.dto.user.UserCreateRequest;
import com.xinggq.user.service.dto.user.UserUpdateRequest;
import com.xinggq.user.service.dto.user.UserPageRequest;
import com.xinggq.user.service.dto.user.UserVO;
import com.xinggq.user.service.entity.SysTenantEntity;
import com.xinggq.user.service.entity.SysUserEntity;

/**
 * 用户信息服务接口
 *
 * @author xinggq
 * @since 2025/10/30
 */
public interface UserInfoService {

  /**
   * 获取用户信息
   *
   * @param userId 用户ID
   * @return 用户实体
   */
  SysUserEntity getUserById(Long userId);

  /**
   * 创建用户
   *
   * @param request 用户创建请求
   * @return 用户信息VO
   */
  UserVO createUser(UserCreateRequest request);

  /**
   * 更新用户
   *
   * @param request 用户更新请求
   * @return 用户信息VO
   */
  UserVO updateUser(UserUpdateRequest request);

  /**
   * 创建租户管理员
   *
   * @param tenant 租户信息
   * @return 用户信息VO
   */
  void initTenantAdmin(SysTenantEntity tenant);

  /**
   * 获取用户详细信息
   *
   * @param userId 用户ID
   * @return 用户信息VO
   */
  UserVO getUserDetail(Long userId);

  /**
   * 分页查询用户
   *
   * @param pageCondition 分页查询条件
   * @return 分页结果
   */
  IPage<UserVO> pageQuery(PageCondition<UserPageRequest> pageCondition);

  /**
   * 启用用户
   *
   * @param userId 用户ID
   * @return 是否成功
   */
  boolean enableUser(Long userId);

  /**
   * 禁用用户
   *
   * @param userId 用户ID
   * @return 是否成功
   */
  boolean disableUser(Long userId);

  /**
   * 删除用户
   *
   * @param userId
   * @return
   */
  boolean delUser(Long userId);

  /**
   * 判断用户编码是否存在
   * @param userName 用户名
   * @param excludeUserId
   * @return
   */
  boolean existByUserName(String userName, Long excludeUserId);
}
